using System;

using Pegasus.Log4Net;
using Pegasus.Log4Net.Appender;
using Pegasus.Log4Net.Core;
using Pegasus.Log4Net.Layout;

namespace Pegasus.ServiceProcess
{
	/// <summary>
	/// Internal Pegasus Class
	/// </summary>
	internal class ServiceApplicationAppender : AppenderSkeleton
	{
		// Local Instance Values
		private FormServiceApplication m_serviceApplication;

		// Public Const Values
		public const string NAME = "ServiceApplicationAppenderDebugMode";

		/// <summary>
		/// Initializes a new instance of the <see cref="ServiceApplicationAppender"/> class.
		/// </summary>
		/// <remarks>Empty default constructor</remarks>
		internal ServiceApplicationAppender( FormServiceApplication serviceApplication )
		{
			m_serviceApplication = serviceApplication;

			// Set the name of the appender
			Name = NAME;

			// Set the default layout for this appender.
			Layout = new SimpleLayout();
		}
		
		/// <summary>
		/// Called to perform actual logging of the event.
		/// </summary>
		/// <param name="loggingEvent">The event to append.</param>
		protected override void Append( LoggingEvent loggingEvent )
		{
			string text = RenderLoggingEvent( loggingEvent );
			m_serviceApplication.WriteText( text );
		}
	}
}
